package com.aaie.gru.problemresult.controller;


import com.aaie.gru.gruenum.UserType;
import com.aaie.gru.interview.entity.GruSysInterview;
import com.aaie.gru.interview.service.IGruSysInterviewService;
import com.aaie.gru.problemresult.entity.GruSysProblemResult;
import com.aaie.gru.problemresult.entity.GruSysProblemResultDto;
import com.aaie.gru.problemresult.entity.GruSysProblemResultVo;
import com.aaie.gru.problemresult.service.IGruSysProblemResultService;
import com.aaie.gru.response.ResMessage;
import com.aaie.gru.theme.entity.GruSysThemeConfig;
import com.aaie.gru.util.CommonUtil;
import com.aaie.gru.util.ConstantUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author lvxing
 * @since 2019-08-09
 */
@Api(tags = "访谈结果模块")
@RestController
@RequestMapping("/problemresult")
public class GruSysProblemResultController {

    @Autowired
    IGruSysProblemResultService gruSysProblemResultService;

    @Autowired
    IGruSysInterviewService iGruSysInterviewService;

    @ApiOperation(value = "获取访谈结果列表", notes = "获取访谈结果列表")
    @PostMapping("/getGruSysProblemResultList")
    public String getGruSysProblemResultList(@RequestBody GruSysProblemResultDto param,HttpSession session) {
        try {
//            // 定义分页
//            Page<GruSysProblemResult> paramPage = new Page<>(param.getCurrent(), param.getSize());
//            // 查询条件
//            QueryWrapper<GruSysProblemResult> queryWrapper = new QueryWrapper<>();
//            // 按更新时间倒叙排序
//            queryWrapper.orderByDesc("update_time_sort");
//            IPage<GruSysProblemResult> page = gruSysProblemResultService.page(paramPage,queryWrapper);
            String userId = CommonUtil.getUser(session).getUserId();
            String userTypeStr = CommonUtil.getUser(session).getUserType();
            if(userTypeStr.equals(UserType.GUARDIAN.getValue()) || userTypeStr.equals(UserType.STUDENT.getValue())){
                param.setProblemResultGuardianId(userId);
            }

            IPage<GruSysProblemResultVo> page = gruSysProblemResultService.selectGruSysProblemResultVoList(param);
            return ResMessage.ok(page.getRecords(), param.getCurrent(), param.getSize(), page.getTotal());
        } catch (BeansException e) {
            e.printStackTrace();
            return ResMessage.error("/problemresult/getGruSysProblemResultList报错", 500);
        }

    }

    @ApiOperation(value = "添加访谈结果", notes = "添加访谈结果")
    @Transactional
    @PostMapping("/addGruSysProblemResult")
    public String addGruSysProblemResult(@RequestBody GruSysProblemResult gruSysProblemResult, HttpSession session) {
        try {
            if (StringUtils.isNotEmpty(gruSysProblemResult.getProblemResultId())) {
                return ResMessage.error("新增的数据不能有主键id", 200);
            }
            // 问题结果对象不能为空
            if (StringUtils.isEmpty(gruSysProblemResult.getProblemResultObject())) {
                return ResMessage.error("问题结果对象不能为空", 200);
            }
            String updateTime = CommonUtil.generateLocalDateTimeUS();
            long updateTimeSort = CommonUtil.generateCurrentTimeMillis();
            //String username = CommonUtil.getUser(session).getUserName();
            //gruSysProblemResult.setCreateName(username);
            gruSysProblemResult.setCreateTime(updateTime);
            gruSysProblemResult.setCreateTimeSort(updateTimeSort);
            //gruSysProblemResult.setUpdateName(username);
            gruSysProblemResult.setUpdateTime(updateTime);
            gruSysProblemResult.setUpdateTimeSort(updateTimeSort);
            boolean save = gruSysProblemResultService.save(gruSysProblemResult);
            if (!save) {
                return ResMessage.error("数据插入失败", 500);
            }

            UpdateWrapper<GruSysInterview> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("interview_guardian_id",gruSysProblemResult.getProblemResultGuardianId());
            updateWrapper.eq("interview_stu_id",gruSysProblemResult.getProblemResultStuId());
            GruSysInterview gruSysInterview = new GruSysInterview();
            gruSysInterview.setInterviewStuStatus(ConstantUtil.THEME_NEW_Y);
            boolean updateInterview = iGruSysInterviewService.update(gruSysInterview,updateWrapper);
//            if (!updateInterview) {
//                return ResMessage.error("访谈数据更新失败", 500);
//            }

            return ResMessage.ok(gruSysProblemResult);
        } catch (Exception e) {
            e.printStackTrace();
            return ResMessage.error("/problemresult/addGruSysProblemResult报错", 500);
        }
    }

    @ApiOperation(value = "更新访谈结果", notes = "更新访谈结果")
    @PostMapping("/editGruSysProblemResult")
    public String editGruSysProblemResult(@RequestBody GruSysProblemResult gruSysProblemResult, HttpSession session) {
        try {
            if (StringUtils.isEmpty(gruSysProblemResult.getProblemResultId())) {
                return ResMessage.error("更新的数据必须有主键id", 200);
            }
            // 问题结果对象不能为空
            if (StringUtils.isEmpty(gruSysProblemResult.getProblemResultObject())) {
                return ResMessage.error("问题结果对象不能为空", 200);
            }
            // 创建人只能取用户账号，不取用户名称了，因为用户名称不是同一个字段，取起来太麻烦
            gruSysProblemResult.setUpdateName(CommonUtil.getUser(session).getUserName());
            gruSysProblemResult.setUpdateTime(CommonUtil.generateLocalDateTime());
            gruSysProblemResult.setUpdateTimeSort(CommonUtil.generateCurrentTimeMillis());
            boolean b = gruSysProblemResultService.updateById(gruSysProblemResult);
            if (!b) {
                return ResMessage.error("数据更新失败", 200);
            }
            return ResMessage.ok(gruSysProblemResult);
        } catch (Exception e) {
            e.printStackTrace();
            return ResMessage.error("/problemresult/editGruSysProblemResult报错", 500);
        }

    }

    @ApiOperation(value = "按id获取访谈结果", notes = "按id获取访谈结果")
    @GetMapping("/getGruSysProblemResult")
    public String getGruSysProblemResult(String problemResultId) {
        try {
            if (StringUtils.isEmpty(problemResultId)) {
                return ResMessage.error("获取数据必须有主键id", 200);
            }
            GruSysProblemResult gruSysProblemResult = gruSysProblemResultService.getById(problemResultId);
            if (gruSysProblemResult == null) {
                return ResMessage.error("获取失败", 200);
            }
            return ResMessage.ok(gruSysProblemResult);
        } catch (Exception e) {
            e.printStackTrace();
            return ResMessage.error("/problemresult/getGruSysProblemResult报错", 500);
        }

    }

    @ApiOperation(value = "删除访谈结果", notes = "删除访谈结果")
    @PostMapping("/delGruSysProblemResult")
    public String delGruSysProblemResult(@RequestBody GruSysProblemResult gruSysProblemResult) {
        try {
            if (StringUtils.isEmpty(gruSysProblemResult.getProblemResultId())) {
                return ResMessage.error("删除数据必须有主键id", 200);
            }
            // 物理删除 删除主题的同时也删除主题对应的反馈内容
            boolean b = gruSysProblemResultService.removeById(gruSysProblemResult.getProblemResultId());
            if (b) {
                return ResMessage.ok("删除数据成功");
            }
            return ResMessage.error("删除数据失败", 200);
        } catch (Exception e) {
            e.printStackTrace();
            return ResMessage.error("/problemresult/delGruSysProblemResult报错", 500);
        }

    }

}
